// 给定一个未排序的整数数组，找出最长连续序列的长度。

var longestConsecutive = function (nums: number[]) {
    // 声明hashSet，用于去重
    const hashSet = new Set<number>(nums);
    // 声明最长子序列长度
    let maxLen: number = 0;
    // 遍历hashset
    for (let num of hashSet.values()) {
        // 如果当前元素是连续序列的起点
        if (!hashSet.has(num - 1)) {
            let currLen: number = 1;
            num++;
            // 新循环统计当前连续子序列的长度
            while (hashSet.has(num)) {
                currLen++;
                num++;
            }
            // 动态维护结果变量
            maxLen = Math.max(currLen, maxLen);
        }
    }
    return maxLen;
};

        // 首先这道题要求是求最长连续子序列长度，所以重复数是不计数的，
        // 例如子序列1、2、2、3、4的长度为 4
        // 看到这里就可以想到其实去重对这道题还是很有意义的
        // 我们使用一个hashSet来存储原数组，过滤掉重复的数字
        // 然后我们遍历这个hashset，对每个遍历到的数字num定位到num-1
        // 如果hashset中不存在num-1,说明当前num为连续子序列的起点
        // 我们就新进入一个循环，在hashset中统计这个连续子序列的长度
        // 最后在大循环的出口动态维护子序列的最长值变量即可。